package com.yishusmt.wechatapi.wechatdev.utils;

import com.yishusmt.wechatapi.wechatdev.constant.ItemConstant;
import com.yishusmt.wechatapi.wechatdev.dto.base.Item;
import com.yishusmt.wechatapi.wechatdev.dto.base.tuling.BaseIntent;
import com.yishusmt.wechatapi.wechatdev.dto.base.tuling.BaseNews;
import com.yishusmt.wechatapi.wechatdev.dto.base.tuling.BaseParameters;
import com.yishusmt.wechatapi.wechatdev.dto.request.RobotResultReq;
import org.apache.catalina.LifecycleState;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author zhangyi
 * @date 2018/9/10 17:10
 */
@Component
public class MessageHandlerUtil {

    @Autowired
    private CustomerUtil customerUtil;

    /**
     * 新闻常量匹配
     */
    public static final String NEW = "新闻";

    /**
     * 扩展常量
     * 还需要修改这个工具类CustomerUtil下的方法
     */
    public static  final String EXPANSION = "";

    /**
     * 此方法是分类消息调度，将不同的消息转发到不同的方法上解析，在返回给微信展示，
     * 后面可以自由扩展
     *
     * @param send  获取用户基本信息
     * @param string 用户发送过来的信息
     * @return
     */
    public String MessageScheduling(Map<String,String> send, String string){
        String robot = null;
        try {
            robot = customerUtil.robot(string);
            if (StringUtils.contains(string, NEW)) {
                return invokeNews(send, robot);
            }//后面扩展
        }catch (Exception e){
            e.printStackTrace();
        }
        return MessageUtil.sendText(send,robot);
    }


    /**
     * 处理新闻字符串
     *
     * @param newsStr
     * @return
     */
    public  String invokeNews(Map<String,String> send,String newsStr){
        String s = null;
        RobotResultReq robotResultReq = JacksonUtil.readValue(newsStr, RobotResultReq.class);
        BaseIntent intent = robotResultReq.getIntent();
        BaseParameters parameters = intent.getParameters();
        String text = robotResultReq.getResults().get(0).getValues().getText();
        if(StringUtils.contains(parameters.getName_output(),NEW) || StringUtils.contains(text,NEW)){
            List<BaseNews> newsList = robotResultReq.getResults().get(1).getValues().getNews();
            //创建文章主体
            List<Item> news = new ArrayList<>();
            newsList.stream()
                    .limit(ItemConstant.MAX_ITEM_LENGTH)
                    .forEach(e -> {
                        String icon = e.getIcon();
                        //过滤无效字符串
                        String replace = icon.substring(2,icon.length());
                        Item item = new Item();
                        item.setTitle(e.getName());
                        item.setPicUrl(replace);
                        item.setDescription(e.getInfo());
                        item.setUrl(e.getDetailurl());
                        news.add(item);
                    });
            s = MessageUtil.sendImgAndText(send, news);
        }
        return s;
    }

}
